home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / ContentModel.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  8.2 KB  |  349 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.util.Debug;
  4. import java.util.Enumeration;
  5. import java.util.Hashtable;
  6. import java.util.Vector;
  7.  
  8. public class ContentModel extends ContentModelTerm {
  9.    public static final int TYPE_ANY = 2;
  10.    public static final int TYPE_EMPTY = 3;
  11.    public static final int TYPE_MIXED = 4;
  12.    public static final int TYPE_TEXT_ONLY = 5;
  13.    public static final int TYPE_TAGS_ONLY = 6;
  14.    boolean contentModelOpen = true;
  15.  
  16.    public ContentModel(ContentModelOwner var1, int var2) {
  17.       ContentModelTerm var3 = null;
  18.       switch (var2) {
  19.          case 2:
  20.          case 3:
  21.             var3 = new ContentModelTerm(var2);
  22.             break;
  23.          case 4:
  24.          case 5:
  25.             var3 = new ContentModelTerm();
  26.             var3.addTerm(new ContentModelTerm(1));
  27.             break;
  28.          case 6:
  29.             var3 = new ContentModelTerm();
  30.             break;
  31.          default:
  32.             Debug.assert(false, String.valueOf("invalid type = ").concat(String.valueOf(var2)));
  33.       }
  34.  
  35.       super.owner = var1;
  36.       ((ContentModelTerm)this).addTerm(var3);
  37.    }
  38.  
  39.    public ContentModel(ContentModelOwner var1) {
  40.       ContentModelTerm var2 = new ContentModelTerm();
  41.       super.owner = var1;
  42.       ((ContentModelTerm)this).addTerm(var2);
  43.    }
  44.  
  45.    public static boolean isMixed(String var0) {
  46.       if (var0.indexOf(44) != -1) {
  47.          return false;
  48.       } else {
  49.          int var1 = var0.indexOf(40);
  50.          if (var1 >= 0) {
  51.             if (var1 < var0.length() - 1) {
  52.                var1 = var0.indexOf(40, var1 + 1);
  53.             } else {
  54.                var1 = -1;
  55.             }
  56.          }
  57.  
  58.          return var1 == -1;
  59.       }
  60.    }
  61.  
  62.    Object clone(ContentModel var1, boolean var2) {
  63.       ContentModel var3 = (ContentModel)((ContentModelTerm)this).clone(true);
  64.       ContentModel var4 = (ContentModel)((ContentModelTerm)var1).clone(false);
  65.       if (var3.isAny() || var3.isEmpty()) {
  66.          var3.groupContents = new Vector();
  67.          var3.groupContents.addElement(new ContentModelTerm());
  68.       }
  69.  
  70.       if (var3.getRootGroup() != null && !var4.isAny() && !var4.isEmpty()) {
  71.          var3.getRootGroup().groupContents.addElement(var4);
  72.       }
  73.  
  74.       return var3;
  75.    }
  76.  
  77.    Object clone(ContentModelOwner var1, SchemaIntf var2, SchemaIntf var3) {
  78.       ContentModelTerm var4 = null;
  79.  
  80.       try {
  81.          var4 = (ContentModelTerm)super.clone(false);
  82.          var4.owner = var1;
  83.          if (super.groupContents != null) {
  84.             var4.groupContents = new Vector();
  85.             Enumeration var5 = super.groupContents.elements();
  86.  
  87.             while(var5.hasMoreElements()) {
  88.                ContentModelTerm var6 = (ContentModelTerm)var5.nextElement();
  89.                if (var6.owner != null) {
  90.                   String var7 = var6.owner.getName();
  91.                   ContentModelOwner var8 = var3.getNamedContentModelOwner(String.valueOf('%').concat(String.valueOf(var7)));
  92.                   Debug.assert(var8 != null, String.valueOf("Unable to find ipe: ").concat(String.valueOf(var7)));
  93.                   var4.addTerm(var8.getContentModel());
  94.                } else {
  95.                   var4.addTerm((ContentModelTerm)var6.clone((ContentModelOwner)null));
  96.                }
  97.             }
  98.          } else {
  99.             var4.term = new TypeRef(super.term.getName());
  100.          }
  101.       } catch (Exception var9) {
  102.          Debug.assert(false, "Problem cloning ContentModelTerm.");
  103.       }
  104.  
  105.       return var4;
  106.    }
  107.  
  108.    public void setContentModel(int var1) {
  109.       ((ContentModelTerm)this).removeAll();
  110.       Object var2 = null;
  111.       ContentModelTerm var3;
  112.       switch (var1) {
  113.          case 2:
  114.          case 3:
  115.             var3 = new ContentModelTerm(var1);
  116.             break;
  117.          case 4:
  118.          case 5:
  119.             var3 = new ContentModelTerm();
  120.             var3.addTerm(new ContentModelTerm(1));
  121.             break;
  122.          case 6:
  123.             var3 = new ContentModelTerm();
  124.             break;
  125.          default:
  126.             Debug.assert(false, String.valueOf("invalid type = ").concat(String.valueOf(var1)));
  127.             return;
  128.       }
  129.  
  130.       ((ContentModelTerm)this).addTerm(var3);
  131.    }
  132.  
  133.    public char getChildConnection() {
  134.       Debug.assert(((ContentModelTerm)this).isGroup(), "getChildConnection only valid for groups.");
  135.       return this.getRootGroup() != null ? this.getRootGroup().getChildConnection() : super.getChildConnection();
  136.    }
  137.  
  138.    public void setChildConnection(char var1) {
  139.       if (this.getRootGroup() != null) {
  140.          char var2 = this.getChildConnection();
  141.          this.getRootGroup().setChildConnection(var1);
  142.          ((ContentModelTerm)this).fireChangeEvent(26, new Character(var2));
  143.       } else {
  144.          super.setChildConnection(var1);
  145.       }
  146.    }
  147.  
  148.    public ContentModelTerm getRootGroup() {
  149.       ContentModelTerm var1 = ((ContentModelTerm)this).firstTerm();
  150.       if (var1 != null && var1.isGroup()) {
  151.          if (super.groupContents.size() != 1) {
  152.             return null;
  153.          } else if (var1.owner instanceof InternalPEDeclaration) {
  154.             ContentModel var2 = ((InternalPEDeclaration)var1.owner).getContentModel();
  155.             return var2.getRootGroup();
  156.          } else {
  157.             return var1 instanceof ContentModel ? null : var1;
  158.          }
  159.       } else {
  160.          return null;
  161.       }
  162.    }
  163.  
  164.    public void createRootGroup() {
  165.       Debug.assert(!this.isAny() && !this.isEmpty(), "shouldn't be used for any or empty");
  166.       Debug.assert(this.getRootGroup() == null, "already had a root group");
  167.       ContentModelTerm var1 = new ContentModelTerm();
  168.       var1.groupContents = super.groupContents;
  169.       super.groupContents = new Vector();
  170.       super.groupContents.addElement(var1);
  171.    }
  172.  
  173.    public void setContentModel(boolean var1, boolean var2) {
  174.       if (this.getAllowsText() != var1 || this.getAllowsTags() != var2) {
  175.          ContentModelTerm var3 = this.getRootGroup();
  176.          if (var2) {
  177.             if (var1) {
  178.                if (!this.isTextOnly() && ((ContentModelTerm)this).getLeafTerms().hasMoreElements() && var3 != null) {
  179.                   var3.prependTerm(new ContentModelTerm(1));
  180.                } else {
  181.                   this.setContentModel(2);
  182.                }
  183.             } else if (var3 == null) {
  184.                this.setContentModel(6);
  185.             } else {
  186.                ContentModelTerm var4 = this.findTerm("#PCDATA", 1);
  187.                if (var4 != null && var4.getParent() == var3) {
  188.                   var3.removeTerm(var4);
  189.                }
  190.             }
  191.          } else if (var1) {
  192.             this.setContentModel(5);
  193.          } else {
  194.             this.setContentModel(3);
  195.          }
  196.  
  197.       }
  198.    }
  199.  
  200.    public boolean contains(String var1) {
  201.       return this.findTerm(var1, 1) != null;
  202.    }
  203.  
  204.    public ContentModelTerm findTerm(String var1, int var2) {
  205.       1.MyVisitor var3 = new 1.MyVisitor((ContentModel)null, var2, var1);
  206.       this.visitTerms(var3, true);
  207.       return var3.getFoundTerm();
  208.    }
  209.  
  210.    public ContentModelTerm findGroup(String var1, int var2) {
  211.       2.MyVisitor2 var3 = new 2.MyVisitor2(var1, (ContentModel)null, var2);
  212.       this.visitTerms(var3, true);
  213.       return var3.getFoundTerm();
  214.    }
  215.  
  216.    public boolean replace(ContentModelOwner var1, ContentModelTerm var2) {
  217.       3.FoundVisitor var3 = new 3.FoundVisitor(var1, var2, (ContentModel)null);
  218.       this.visitTerms(var3, false);
  219.       return var3.found;
  220.    }
  221.  
  222.    protected void replace(ContentModelTerm var1, ContentModelTerm var2) {
  223.       this.visitTerms(new 1(var1, var2, (ContentModel)null), false);
  224.    }
  225.  
  226.    public void visitTerms(ContentModelTerm.Visitor var1, boolean var2) {
  227.       Hashtable var3 = new Hashtable();
  228.       ((ContentModelTerm)this).visitChildren(var1, var3, var2);
  229.    }
  230.  
  231.    void updateContentModelToBlank() {
  232.       if (this.getAllowsTags()) {
  233.          if (this.getAllowsText()) {
  234.             this.setContentModel(2);
  235.          } else {
  236.             this.setContentModel(3);
  237.          }
  238.       } else if (this.getAllowsText()) {
  239.          this.setContentModel(5);
  240.       } else {
  241.          this.setContentModel(3);
  242.       }
  243.  
  244.    }
  245.  
  246.    public boolean isOpen() {
  247.       return this.contentModelOpen;
  248.    }
  249.  
  250.    public void setOpen(boolean var1) {
  251.       this.contentModelOpen = var1;
  252.    }
  253.  
  254.    public void setEmpty() {
  255.       this.setContentModel(3);
  256.    }
  257.  
  258.    public void setTextOnly() {
  259.       this.setContentModel(5);
  260.    }
  261.  
  262.    public void setTagsOnly() {
  263.       this.setContentModel(6);
  264.    }
  265.  
  266.    public void setMixed() {
  267.       this.setContentModel(4);
  268.    }
  269.  
  270.    public void setMany() {
  271.       this.setContentModel(6);
  272.       this.getRootGroup().setConnection('|');
  273.       this.getRootGroup().setOccurance('*');
  274.    }
  275.  
  276.    public void setAny() {
  277.       this.setContentModel(2);
  278.    }
  279.  
  280.    public boolean isTextOnly() {
  281.       return this.getType() == 5;
  282.    }
  283.  
  284.    public boolean isTagsOnly() {
  285.       return this.getType() == 6;
  286.    }
  287.  
  288.    public boolean isAny() {
  289.       return this.getType() == 2;
  290.    }
  291.  
  292.    public boolean isEmpty() {
  293.       return this.getType() == 3;
  294.    }
  295.  
  296.    public boolean isMixed() {
  297.       int var1 = this.getType();
  298.       return var1 == 4;
  299.    }
  300.  
  301.    public boolean getAllowsTags() {
  302.       int var1 = this.getType();
  303.       return var1 == 2 || var1 == 4 || var1 == 6;
  304.    }
  305.  
  306.    public boolean getAllowsText() {
  307.       int var1 = this.getType();
  308.       return var1 == 2 || var1 == 4 || var1 == 5;
  309.    }
  310.  
  311.    protected int getType() {
  312.       ContentModelTermEnum var1 = ((ContentModelTerm)this).getLeafTerms();
  313.       if (!var1.hasMoreElements()) {
  314.          return 6;
  315.       } else {
  316.          ContentModelTerm var2 = var1.nextContentModelTerm();
  317.          if (var2.getTerm().equals("#EMPTY")) {
  318.             return 3;
  319.          } else if (var2.getTerm().equals("#ANY")) {
  320.             return 2;
  321.          } else if (!var2.getTerm().equals("#PCDATA")) {
  322.             return 6;
  323.          } else {
  324.             return var1.hasMoreElements() ? 4 : 5;
  325.          }
  326.       }
  327.    }
  328.  
  329.    public String getSource(boolean var1) {
  330.       return var1 || !this.isEmpty() && !this.isAny() && !this.isTextOnly() ? super.getSource(var1) : "";
  331.    }
  332.  
  333.    private void setOwner(ContentModelOwner var1) {
  334.       super.owner = var1;
  335.    }
  336.  
  337.    public boolean isOwned() {
  338.       return true;
  339.    }
  340.  
  341.    public ContentModelOwner getOwner() {
  342.       return super.owner;
  343.    }
  344.  
  345.    void setParent(ContentModelTerm var1) {
  346.       Debug.assert(false, "models don't have parents");
  347.    }
  348. }
  349.